package org.cs.mainmemorymachine;

/**
 * 主存储器
 *
 * @author fbin
 * @since 2022/4/5 10:36
 */
public class MainMemoryMachine {
    /**
     * 存储体
     */
    private static final MemoryBody MB;

    /**
     * 存储地址寄存器
     */
    private static final MemoryAddressRegister MAR;

    /**
     * 存储数据寄存器
     */
    private static final MemoryDataRegister MDR;

    static {
        MAR = new MemoryAddressRegister();
        MDR = new MemoryDataRegister();
        MB = new MemoryBody();
    }

    /**
     * 读数据
     *
     * @param address 内存地址
     * @return 数据
     */
    public Object read(int address) {
        // MAR存储地址
        MAR.setAddress(address);
        // MB读取数据
        Object data = MB.getData(MAR.getAddress());
        // MDR存储数据
        MDR.setData(data);
        // MDR读取数据
        return MDR.getData();
    }

    /**
     * 存储数据
     *
     * @param address 内存地址
     * @param data    数据
     */
    public void write(int address, Object data) {
        // MAR存储地址
        MAR.setAddress(address);
        // MDR存储数据
        MDR.setData(data);
        // MB存储地址和数据
        MB.setData(MAR.getAddress(), MDR.getData());
    }
}
